tg-me.com/csharpproglib/5908
Last Update:
📝 Контроль объема логов в .NET-приложениях
В больших приложениях поток логов может быть огромным — это перегружает хранилище и снижает производительность.
Полное отключение детальных логов — плохое решение, ведь важные данные могут потеряться. Лучше использовать выборочное логирование.
.NET теперь поддерживает несколько стратегий выборочного логирования:
• Случайная выборка по вероятности
• Выборка по трассировке
• Пользовательские сэмплеры для гибкой настройки
Пример простого пользовательского сэмплера для .NET, который ограничивает вывод логов до примерно 1 сообщения в секунду:
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
var key = eventId.Id.ToString();
var now = DateTime.UtcNow;
var lastTime = _lastLoggedTimes.GetOrAdd(key, DateTime.MinValue);
if ((now - lastTime) >= _interval)
{
_lastLoggedTimes[key] = now;
var message = formatter(state, exception);
Console.WriteLine($"[{now:O}] {logLevel}: {message}");
// Здесь вместо Console.WriteLine — вызов реального логгера
}
else
{
// Пропускаем лог, чтобы не создавать слишком много записей
}
}
Это может снизить затраты на хранение и обработку логов без потери ключевой информации.